<html>
    <head>
        <title>定义模板</title>
    </head>
    <body>
        <script>
             /*
                  四、定义模板  Defining Templates

                                        
                            在渲染模板之前，你应该先定义它。创建一个继承自 TemplateDefinitionProvider基类的类：

                             eg： 
                                  public class DemoTemplateDefinitionProvider: TemplateDefinitionProvider  // 继承 "模板定义提供这" 基类
                                  { 
                                        // 通过重写 Define 方法来完成模板定义
                                        public override void Define(ITemplateDefinitionContext context)   // ITemplateDefinitionContext 模板定义上下文
                                        {
                                            context.Add(
                                                new  TemplateDefinition("Hello")    // 模板名称 "hello"
                                                       .WithRazorEngin()
                                                       .WithVirtualFilePath(
                                                            "/Demos/Hello/Hello.cshtml", // 模板内容路径
                                                            isInlinLocalized:true 
                                                       )
                                            );
                                        }          
                                  }

                                  ①、context:   文本模板定义上下文对象，用于添加新模板或获取依赖模块定义的模板。使用 context.Add(...) 定义新模板

                                  ②、TemplateDefinition类，此类代表一个模板。每个模板都必须有一个唯一的名字(在渲染模板时会用到)

                                  ③、"/Demos/Hello/Hello.cshtml"是模板文件的路径。

                                  ④、isInlineLocalized 用于声明是对所有语言使用单个模板(true),还是对每种语言使用不同模板(false)。
                                     
                                        更多信息请参阅下面的"本地化"部分。

                                  ⑤、WithRenderEngine 方法用于设置模板的渲染引擎。



                            1、模板基类 

                                    每个cshtml 模板页面都需要继承 RazorTemplatePageBase 或者  RazorTemplatePageBase<Model>.

                                    基类中有一些属性可在模板中使用。例如： Localizer、ServiceProvider


                            2、模板内容

                                    WithVirtualFilePath 表示我们正在使用"虚拟文件系统"来存储模板内容。
                                    
                                    ①、在项目中创建一个Hello.cshtml文件，并且在属性窗口将其标记为"嵌入的资源"：

                                            图片： https://raw.githubusercontent.com/abpframework/abp/rel-9.2/docs/en/images/hello-template-razor.png


                                    ②、示例 Hello.cshtml 的内容如下：

                                         // 集成自 RazorTemplatePageBase<Model> 基类
                                         @inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase<HelloModelNamespace.HelloModel>
                                         Hello @Model.Name

                                    ③、HelloModel 类如下：

                                            namespace HelloModelNamespace
                                            {
                                                public class HelloModel
                                                {
                                                    public string Name { get; set; }
                                                }
                                            }

                                    ④、虚拟文件系统需要在 ConfigureServices 方法中添加你文件：

                                            Configure<AbpVirtualFileSystemOptions>(options =>
                                            {
                                                options.FileSets.AddEmbedded<TextTemplateDemoModule>("TextTemplateDemo");
                                            });

                                            TextTemplateDemoModule是用于定义模板的模块类。

                                            TextTemplateDemo是你项目的根命名空间。
            */
        </script>
    </body>
</html>